package com.example.demo.lianxi;

import sun.reflect.CallerSensitive;
import sun.reflect.Reflection;

import java.util.HashMap;
import java.util.Map;

public class ReflectDemo {
    public static void main(String[] args) {

        /*一、通过对象的getClass()方法

getClass()方法是Object类的方法，因为所有类都继承自Object类，所以可以直接使用getClass()方法
        Student student = new Student();

        Class studentClass = student.getClass();

        System.out.println(studentClass);

         */
/*二、通过类的.class属性
直接获取一个类的class
        Class<?> studentClass = Student.class;

        System.out.println(studentClass);

*/


/*三、通过Class类的forName()方法（常用）
Class.forName() 是一个静态方法
        try {

            Class<?> studentClass = Class.forName("com.example.demo.lianxi.Student");

            System.out.println(studentClass);

        }catch (ClassNotFoundException e){

            e.printStackTrace();

        }

 */


        /*判断一个类是否为某个类的实例
        输出：HashMap is Map instance
        HashMap<Integer, String> map = new HashMap<>();

        if (map instanceof Map) {

            System.out.println("HashMap is Map instance");

        }

         */

        // 这里的Student是使用上面一开始的Student类

        Class<?> studentClass = Student.class;

// 使用newInstance创建实例

        Student student = null;
        try {
            student = (Student)studentClass.newInstance();//newInstance()也是用来创建新的对象,其与new()的区别是:newInstance():弱类型,效率低,只能调用无参构造,
            // new():强类型,高效率,能调用任何public构造器
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        student.setId(1);

        student.setName("John");

        System.out.println(student);

    }
}
